package com.campus.help.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.campus.help.entity.LaborType;

import java.util.List;

/**
 * 劳务类型服务接口
 *
 * @author campus-help
 * @since 2025-09-18
 */
public interface LaborTypeService extends IService<LaborType> {

    /**
     * 分页查询劳务类型
     *
     * @param page 当前页
     * @param size 页面大小
     * @param typeName 类型名称（模糊查询）
     * @param status 状态
     * @return 分页结果
     */
    IPage<LaborType> getLaborTypePage(Integer page, Integer size, String typeName, Integer status);

    /**
     * 获取启用状态的劳务类型列表
     *
     * @return 启用的劳务类型列表
     */
    List<LaborType> getEnabledTypes();

    /**
     * 创建劳务类型
     *
     * @param laborType 劳务类型信息
     * @return 创建成功的劳务类型
     */
    LaborType createLaborType(LaborType laborType);

    /**
     * 更新劳务类型
     *
     * @param laborType 劳务类型信息
     * @return 更新成功的劳务类型
     */
    LaborType updateLaborType(LaborType laborType);

    /**
     * 删除劳务类型
     *
     * @param typeId 类型ID
     * @return 是否删除成功
     */
    boolean deleteLaborType(Long typeId);

    /**
     * 批量删除劳务类型
     *
     * @param typeIds 类型ID列表
     * @return 是否删除成功
     */
    boolean batchDeleteLaborTypes(List<Long> typeIds);

    /**
     * 更新劳务类型状态
     *
     * @param typeId 类型ID
     * @param status 新状态
     * @return 是否更新成功
     */
    boolean updateStatus(Long typeId, Integer status);

    /**
     * 更新劳务类型排序
     *
     * @param typeId 类型ID
     * @param sortOrder 新的排序值
     * @return 是否更新成功
     */
    boolean updateSortOrder(Long typeId, Integer sortOrder);

    /**
     * 批量更新劳务类型排序
     *
     * @param typeIds 类型ID列表（按新的排序顺序）
     * @return 是否更新成功
     */
    boolean batchUpdateSortOrder(List<Long> typeIds);

    /**
     * 获取系统默认类型列表
     *
     * @return 系统默认类型列表
     */
    List<LaborType> getDefaultTypes();

    /**
     * 检查类型名称是否重复
     *
     * @param typeName 类型名称
     * @param excludeId 排除的ID（用于更新时检查）
     * @return 是否重复
     */
    boolean checkTypeNameExists(String typeName, Long excludeId);

    /**
     * 获取类型使用统计
     *
     * @param typeId 类型ID
     * @return 使用该类型的劳务数量
     */
    Long getTypeUsageCount(Long typeId);
}
